package br.com.petrobras.iam.plugins.register.factory;

import org.apache.log4j.Logger;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;

/**
 * Classe utilitaria que simplifica o carregamento de um
 * arquivo de properties
 */
public final class ArquivoPropriedade {

    private static final Logger LOGGER = Logger.getLogger(ArquivoPropriedade.class);

    /**
     * Como eh um utilitario nao deve ter construtor publico
     */
    private ArquivoPropriedade() {
    }


    /**
     * Carregar um propertie do classpath. Lanca uma @see SystemException caso nao encontre
     * o arquivo no classpath ou nao consiga abrir o mesmo.
     *
     * @param propsName nome do arquivo de propertie
     * @return Arquivo de propertie
     * @throws Exception
     */
    public static Properties carregar(String propsName) throws Exception {
        InputStream inputStream = null;
        String erroMsg = "Nao foi possivel encontrar o arquivo de propriedade '%s'";
        Properties props = new Properties();
        //pega do classpath
        URL url = ClassLoader.getSystemResource(propsName);

        //se nao conseguir abrir a url do classpath aborta
        if (url == null) {
            LOGGER.error(String.format(erroMsg, propsName));
            throw new Exception("A URL esta nula");
        }

        try {
            inputStream = url.openStream();
            props.load(inputStream);
        } catch (IOException ex) {
            LOGGER.error(String.format(erroMsg, propsName), ex);
            throw new Exception("A URL esta nula", ex);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    LOGGER.error(String.format("Problema ao fechar o arquivo de propriedades '%s'", propsName), e);
                }
            }
        }
        return props;
    }
}